package com.travel.server.manager.impl.command.project;

import com.travel.common.util.CollectionUtil;
import com.travel.server.manager.dto.request.project.QueryGroupEnumRequest;
import com.travel.server.manager.dto.response.project.QueryGroupEnumResponse;
import com.travel.server.manager.dto.response.project.QueryGroupEnumResponse.ClassItem;
import com.travel.server.manager.dto.response.project.QueryGroupEnumResponse.GroupEnumItem;
import com.travel.server.manager.impl.command.AbstractCommand;
import com.travel.server.manager.impl.dal.GroupDal;
import com.travel.server.manager.model.ProjectGroup;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @Author: LiZhenhui
 * @Date: 2018/10/30 16:10
 * @Desc:
 */
@Component
@Slf4j
public class QueryGroupEnumCommand extends AbstractCommand<QueryGroupEnumRequest, QueryGroupEnumResponse> {

    @Autowired
    private GroupDal groupDal;

    @Override
    protected void checkInput(QueryGroupEnumRequest request) {

    }

    @Override
    public QueryGroupEnumResponse handle(QueryGroupEnumRequest request) {
        QueryGroupEnumResponse response = new QueryGroupEnumResponse();
        List<ClassItem> classList = new ArrayList<>();

        List<ProjectGroup> list = groupDal.selectEnum(request.getParentClass());
        if(!CollectionUtil.isEmpty(list)){
            Set<Integer> classIdSet = new HashSet<>();
            for(ProjectGroup projectGroup : list){
                classIdSet.add(projectGroup.getParentClass());
            }

            response.setTotalClass(classIdSet.size());

            for(Integer classId : classIdSet){
                ClassItem classItem = new ClassItem();
                classItem.setClassId(classId);
                List<GroupEnumItem> groupEnumList = new ArrayList<>();
                for(int i = 0; i < list.size(); i++){
                    if(list.get(i).getParentClass().equals(classId)){
                        GroupEnumItem groupEnumItem = new GroupEnumItem();
                        groupEnumItem.setId(list.get(i).getId());
                        groupEnumItem.setName(list.get(i).getName());
                        groupEnumList.add(groupEnumItem);
                    }
                }
                classItem.setGroupEnumList(groupEnumList);
                classList.add(classItem);
            }
        }
        response.setClassList(classList);

        return response;
    }
}
